package com.xygz.orm;

import com.xygz.orm.constants.ErrorMessages;
import com.xygz.orm.constants.ORMConstants;
import com.xygz.orm.exception.ORMException;

import javax.sql.DataSource;
import java.sql.SQLException;

/**
 * the description for class ORMBuilder
 *
 * @author xiyuan-lgz 2023-11-11 @version v1.0.0 新建与整理
 */
@SuppressWarnings("all")
public interface ORMBuilder extends ErrorMessages, ORMConstants {
    /**
     * 构建 数据库ORM
     *
     * @param dataSource 数据源
     * @param parameter  数据库参数
     * @return ORMPolicy
     * @throws SQLException 异常信息
     * @throws ORMException 异常信息
     */
    public ORMServer build(DataSource dataSource, ORMParameter parameter) throws SQLException, ORMException;
    
    /**
     * 构建 数据库ORM
     *
     * @param parameter 数据库参数
     * @return ORMPolicy
     * @throws SQLException 异常信息
     * @throws ORMException 异常信息
     */
    public ORMServer build(ORMParameter parameter) throws SQLException, ORMException;
   
    /**
     * 创建 SQL 编辑器
     *
     * @param c   SQL 编辑器类
     * @param e   数据对象类
     * @param <C> 编辑器类型
     * @param <E> 结果类型
     * @return SQL 编辑器
     * @throws ORMException 异常信息
     * @throws SQLException 异常信息
     */
    public <E, C extends ConditionWrapper<E,C>> C createConditioner(Class<C> c, Class<E> e) throws ORMException, SQLException;
    
    
    /**
     * 创建 SQL 编辑器
     *
     * @param c   SQL 编辑器类
     * @param e   数据对象
     * @param <C> 编辑器类型
     * @param <E> 结果类型
     * @return SQL 编辑器
     * @throws ORMException 异常信息
     * @throws SQLException 异常信息
     */
    public <E, C extends ConditionWrapper<E,C>> C createConditioner(Class<C> c, E e) throws ORMException, SQLException;
    
    
}
